package br.uvv.sao.rn;

import java.io.Serializable;
import java.util.List;

import br.uvv.sao.dao.QuestaoDAO;
import br.uvv.sao.domain.AlternativaBase;
import br.uvv.sao.domain.PalavraChave;
import br.uvv.sao.domain.Professor;
import br.uvv.sao.domain.QuestaoBase;
import br.uvv.sao.domain.Usuario;
import br.uvv.sao.enums.TipoGrauDificuldade;
import br.uvv.sao.util.DAOException;

public class QuestaoRN implements Serializable {
	private static final long serialVersionUID = -2927752773419948020L;
	
	QuestaoDAO dao;
	
	public QuestaoRN(){
		dao = new QuestaoDAO();
	}

	public Professor getProfessor(Usuario usuarioLogado) {
		try {
			return dao.getProfessor(usuarioLogado);
		} catch (DAOException e) {
			e.printStackTrace();
		}
		return new Professor();
	}
	
	public PalavraChave getPalavraChave(String nome){
		return dao.getPalavraChave(nome);
	}

	public void save(QuestaoBase questaoBaseInstance) {
		dao.salvar(questaoBaseInstance);
	}

	public void update(QuestaoBase questaoBaseInstance, List<AlternativaBase> alternativaRemoverList) {
		dao.atualizar(questaoBaseInstance, alternativaRemoverList);
	}

	public void delete(QuestaoBase questaoBaseInstance) throws DAOException {
		dao.delete(questaoBaseInstance);
	}

	public List<QuestaoBase> listarQuestoes(String variavelBusca, String varBuscaAssunto, String varBuscaCabecalho, TipoGrauDificuldade varBuscaDificuldade, int first,
			int pageSize, String sortField, boolean sortOrder) throws DAOException {
		return dao.listarQuestoes(first, pageSize, sortField, sortOrder, variavelBusca, varBuscaAssunto, varBuscaCabecalho, varBuscaDificuldade);
	}

	public int listarQuestoesCount(String variavelBusca, String varBuscaAssunto, String varBuscaCabecalho, TipoGrauDificuldade varBuscaDificuldade) throws DAOException {
		return dao.listarQuestoesCount(variavelBusca, varBuscaAssunto, varBuscaCabecalho, varBuscaDificuldade);
	}

	public QuestaoBase getQuestao(Long id) throws DAOException {
		return dao.getQuestao(id);
	}

	public Boolean verificarNome(String nome, PalavraChave palavraChaveInstancia){
		Boolean selecionado = false;
		try{
			if (palavraChaveInstancia.getId()!=null)
				selecionado = true;
		} catch (Exception e){
			selecionado = false;
		}
		Integer retorno = dao.findByObjectCount("nome", nome);
		if (selecionado){
			if (retorno>1)
				return false;
			else
				return true;
		}
		if (retorno>0){
			return false;
		}
		return true;
	}

	public void salvarPalavraChave(PalavraChave palavraChaveInstance) {
		Long codigo = palavraChaveInstance.getId();
		if (codigo == null || codigo == 0){
			this.dao.salvar(palavraChaveInstance);
		} else {
			this.dao.atualizar(palavraChaveInstance);
		}
	}
}
